package com.ray.auth.system.service;

import java.util.List;

import org.springframework.stereotype.Service;

import com.ray.auth.system.emun.LinkType;
import com.ray.auth.system.table.entity.Role;
import com.ray.auth.system.vo.Resource;
import com.zjhc.flyhong.common.function.operator.LoginUser;
import com.zjhc.flyhong.common.function.operator.PageDto;
import com.zjhc.flyhong.common.web.Result;

/**
 * <h1>角色服务  服务接口</h1>
 * @创建人 ray
 * @创建时间 2017-06-10
 * @版本 1.0
 * @重要修改备注 
 * 
 */
@Service
public interface RoleService {
    /**
     * 获取角色下所有角色
     * @param userId 角色ID
     * @return 角色ID列表
     */
	List<String> queryRoleByUserId(String userId);
	
	/**
     * 获取角色组下所有角色
     * @param userId 角色ID
     * @return 角色ID列表
     */
	List<String> queryRoleByUserGroupId(String userGroupId);
	/**
     * 通过关联数据 获取角色
     * @param linkId 关联ID
     * @param linkType 关联类型
     * @return 角色ID列表
     */
	List<Role> queryRolesByLinkType(String linkId, LinkType linkType);
	
	/**
	 * 新增角色
	 * @param params 角色对象
	 * @param loginUser 登录角色
	 * @return
	 */
	public Result<Object> addRole(Role params, LoginUser loginUser);
	/**
	 * 查询角色
	 * @param id 角色ID
	 * @param user
	 * @return
	 */
	public Role queryRole(String id, LoginUser user);
	/**
	 * 更新角色信息
	 * @param params 角色信息
	 * @param loginUser
	 * @return
	 */
	public Result<Object> updateRole(Role params, LoginUser loginUser);
	/**
	 * 删除角色
	 * @param id
	 * @param loginUser
	 * @return
	 */
	public Result<Object> deleteRole(String id, LoginUser loginUser);
	/**
	 * 分页查询角色
	 * @param params
	 * @param page
	 * @param loginUser
	 * @return
	 */
	public PageDto<Role> queryRoleList(Role params, PageDto<Role> page, LoginUser loginUser);
    /**
     * 未拥有的角色查询
     * @param params
     * @param page
     * @param loginUser
     * @return
     */
	PageDto<Role> queryNotHaveRoleList(Role params,String linkId, PageDto<Role> page, LoginUser loginUser);
    /**
     * 拥有的角色查询
     * @param params
     * @param page
     * @param loginUser
     * @return
     */
	PageDto<Role> queryHaveRoleList(Role params,String linkId, PageDto<Role> page, LoginUser loginUser);
    /**
     * 新增角色 关联
     * @param id 角色ID
     * @param type 关联类型
     * @param loginUser
     * @return
     */
	Result<Object> addRoleRel(String id,String linkId, String linkType, LoginUser loginUser);
	/**
     * 删除角色 关联
     * @param id 角色ID
     * @param type 关联类型
     * @param loginUser
     * @return
     */
	Result<Object> deleteRoleRel(String id,String linkId, String linkType, LoginUser loginUser);
    /**
     * 获取角色对应的资源
     * @param menuId
     * @param roleId
     * @param user
     * @return
     */
	List<Resource> queryRoleResource(String menuId, String roleId, LoginUser user);
    /**
     * 获取角色
     * @param ids
     * @return
     */
	List<Role> queryRole(List<String> ids);
}
